from rest_framework import serializers
from django_redis import get_redis_connection
# serializers.ModelSerializer
# serializers.Serializer
# 我们没有关联模型，所以选择Serializer
class RegisterSmscodeSerializer(serializers.Serializer):

	text = serializers.CharField(label='图片验证码',max_length=4,min_length=4,required=True)
	image_code_id = serializers.UUIDField(label='uuid',required=True)
	"""
	对数据的验证有四种方式：
		1.字段类型
		2.字段选项
		3.单字段校验
		4.多字段校验
	"""
	# def validate(self, data):
	def validate(self, attrs):
		image_code_id = attrs.get('image_code_id')
		# data -->attrs
		# 1.获取用户提交的图片验证码
		text = attrs.get('text')
		# 2.获取redis的图片验证码
		# 2.1链接redis
		redis_conn = get_redis_connection('code')
		# 2.2获取
		redis_text = redis_conn.get('img_%s'%image_code_id)
		# 2.3注意有效期
		if redis_text is None:
			raise serializers.ValidationError('图片验证码已过期')
		# 3.对比
		# 注意点：redis的数据是bytes类型
		# 大小写
		if redis_text.decode().lower() != text.lower():
			raise serializers.ValidationError('图片验证码不一致')

		# 必须要将验证的值 返回
		return attrs


